
/******************/
/* TP3 - GRUPO 13 */
/******************/
/* Andre Bonna    */
/* Artur Gontijo  */
/* Ivo Trivella   */
/******************/


#include "func.h"


int main(int argc, char *argv[]) {

   /* Declara uma variavel da estrutura de registro: 'dados' */
  reg dados;
  
  /* Declara uma variavel do indice (PKs) */
  tipoindice pk;

  /* Declara as variaveis para indice secundario  */
  tipoindice titulo;
  tipoindice tipo;
  tipoindice autor;
  tipoindice ano;

  /* Variavel que armazena o numero de alocacao do vetor de indice */
  int alocados = NALLOC;
  
  /* Declara e inicializa apontadores para os arquivos */
  FILE *basept = NULL;   /* basept: base de dados */
  FILE *testarq = NULL;  /* testarq: apontador pra teste de indices */
  FILE *arq = NULL;      /* arq: apontador Generico pra Abrir arquivos */

  /* String: Nome do arquivo a ser gerado pela Funçao usada  */
  char nomearq[NOMEARQTAM];
  
  basept = fopen(BASE,"r+"); /* ABRE */

  system("clear"); /* Limpa o prompt */

  /* Imprime o titulo da interface */
  printf("\n+=====================================================+\n");
  printf("+==========  Catalogo de Obras de Arte 3.0  ==========+\n");
  printf("+=====================================================+\n\n");

  /* Aloca espaco no vetor de celulas (indice primario) */
  pk.listask = (tipocelsk *)malloc(sizeof(tipocelsk)*alocados);
  titulo.listask = (tipocelsk *)malloc(sizeof(tipocelsk)*(alocados*3));
  tipo.listask = (tipocelsk *)malloc(sizeof(tipocelsk)*(alocados)*3);
  autor.listask = (tipocelsk *)malloc(sizeof(tipocelsk)*(alocados)*3);
  ano.listask = (tipocelsk *)malloc(sizeof(tipocelsk)*(alocados));

  testarq = fopen(INDPRIM, "r");

  /* Verifica se o indice primario ja existe: */
  /* Caso nao existe, chama a funcao 'criaindice()' que criara todos os indices; */
  /* Caso exista, apenas carrega todos os indices para a memoria */
  if(testarq == NULL) {

    criaindice(&basept, &arq, &pk, &titulo, &tipo, &autor, &ano, &alocados);

    testarq = fopen(INDPRIM, "r");
  }
  else if(testarq != NULL) {

  strcpy(nomearq, INDPRIM);
  ind2ram(&arq, &pk, nomearq, &alocados); /* Carrega os dados do pk para a memoria */

  strcpy(nomearq, TITSK);
  ind2ram(&arq, &titulo, nomearq, &alocados); /* Carrega os dados do pk de TITULO para a memoria */

  strcpy(nomearq, TIPSK);
  ind2ram(&arq, &tipo, nomearq, &alocados); /* Carrega os dados do pk de TIPO para a memoria */

  strcpy(nomearq, AUTSK);
  ind2ram(&arq, &autor, nomearq, &alocados); /* Carrega os dados do pk de AUTOR para a memoria */

  strcpy(nomearq, ANOSK);
  ind2ram(&arq, &ano, nomearq, &alocados); /* Carrega os dados do pk de ANO para a memoria */

  }

  /* Chama a funcao do menu principal */
  menup(&basept, &arq, &dados, &pk, &titulo, &tipo, &autor, &ano, &alocados);

  fclose(basept); /* FECHA */
  fclose(testarq);

  free(pk.listask);
  free(titulo.listask);
  free(tipo.listask);
  free(autor.listask);
  free(ano.listask);

  printf("\n\n\n  *** Obrigado por utilizar Catalogo de Obras de Arte 3.0! ***\n\n\n");
  return 0;
}
